package leetcode;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

//给定一个仅包含数字 2-9 的字符串，返回所有它能表示的字母组合。
//给出数字到字母的映射如下（与电话按键相同）。注意 1 不对应任何字母

public class problems_017 {

    public static void main(String[] arge) {
        System.out.println(new Solution().letterCombinations("23"));
    }

    static class Solution {
        public Map<String, String> map = new HashMap<String, String>() {{
            put("2", "abc");
            put("3", "def");
            put("4", "ghi");
            put("5", "jkl");
            put("6", "mno");
            put("7", "pqrs");
            put("8", "tuv");
            put("9", "wxyz");
        }};

        public List<String> letterCombinations(String digits) {
            List<String> ret = new ArrayList<>();
            if (null == digits) return ret;
            // 取得遍历对象
            for (int i = 0; i < digits.length(); i++) {
                if (map.containsKey(String.valueOf(digits.charAt(i)))) {
                    String newItem = map.get(String.valueOf(digits.charAt(i)));
                    List<String> newList = new ArrayList<>();
                    for (int j = 0; j < newItem.length(); j++) {
                        if (ret.isEmpty()) {
                            newList.add(String.valueOf(newItem.charAt(j)));
                        } else {
                            for (String item : ret) {
                                newList.add(item + newItem.charAt(j));
                            }
                        }
                    }
                    ret = newList;
                }
            }
            return ret;
        }
    }
}
